﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using Thread = System.Threading.Tasks;
using Microsoft.Practices.Unity;
using Infrastucture;
using Infrastucture.Collections;
using TimeSplicerModule.Factories;
using TimeSplicerModule.DomainModels;
using TimeSplicerModule.Security;
using TimeSplicerModule.ViewModels;


namespace TimeSplicerModule.Services
{
    public interface IProjectService
    {
        ProjectViewModel CreateNew();
        ProjectModel Get(Guid id);
        ProjectViewModel GetViewModel(Guid id);
        ProjectModel Save(ProjectModel project);
        ProjectViewModel Complete(ProjectViewModel project);
        ProjectViewModel Save(ProjectViewModel projectViewModel);
        ProjectViewModel AddUser(ProjectViewModel project, UserModel user, ProjectRoleModel projectRole);
        List<ProjectModel> GetList(UserModel user);
        List<ProjectModel> GetList(List<UserModel> users);
        List<ProjectModel> GetMyProjects();
        List<ProjectModel> GetMyProjects(StatusModel byStatus);
        List<ProjectModel> GetMyTeamUserProjects();
        List<ProjectModel> GetModelByTeam(Guid teamGuid);
        int MyProjectCount(StatusModel byStatus);
        int MyActiveProjectCount();
        double ProjectHours(Guid projectGuid);
        double ProjectHours(List<TaskModel> tasks);
        ProjectListViewModel GetProjectListViewModel();
        void UpdateProjectStatus(Guid projectGuid, StatusModel status);

        // add get my projects
        // add get my teams projects -if dev/principal
    }
}
 